package com.hsj.service;

import com.hsj.UserService;
import org.apache.dubbo.common.stream.StreamObserver;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

/**
 * 使用dubbo  rpc调用
 */
@Service
public class OrderServiceUseDubbo {
    @DubboReference  // @DubboReference(version = "1.0")   表示使用 version1.0版本的接口， 因为接口可以多实现，每一个实现是一个版本
    private UserService userService;

    public String getOrder(){
        String orderInfo = "order info ";
        String user = userService.getUser();
        return orderInfo + "dubbo获取user信息 :" + user;
    }

    /**
     *   单端流， 消费者 调用 生产者(也就是接口提供方)  ，生产者可以返回多次数据， 消费者都可以拿到
     * @return
     */
    public String getSayHelloUseTripleStream(){
        userService.sayHelloServerStream("hsj", new StreamObserver<String>() {
            @Override
            public void onNext(String data) {
                System.out.println("接收 服务提供者的 结果"+data);
                //stream的 返回可能有多次，这里会获取多个结果
            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onCompleted() {
                System.out.println("结束");
            }
        });
     return "success";
    }





    public String getSayHelloUse2Stream(){
              StreamObserver<String> stringStreamObserver =   userService.sayHelloStream(new StreamObserver<String>() {
                    @Override
                    public void onNext(String data) {
                        System.out.println(" 接口调用者 接收 接口提供者 发来的数据 ");
                    }

                    @Override
                    public void onError(Throwable throwable) {

                    }

                    @Override
                    public void onCompleted() {
                        System.out.println("接口调用者  接收到 接口提供者  结束");
                    }
                });
              stringStreamObserver.onNext("1-1-1-1-1-1-1");
                  //业务逻辑
              stringStreamObserver.onNext("2-2-2-2-2-2-2-2");
                  //业务逻辑
              stringStreamObserver.onNext("3-3-3-3-3-3-3-3-3");
                  //业务逻辑
              stringStreamObserver.onCompleted();

              return "success";
    }





}
